package com.larry.spark.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object RDD_Oper_join {

  def main(args: Array[String]): Unit = {
    //TODO  使用spark join

    val conf = new SparkConf().setMaster("local[*]").setAppName("rdd")
    val sc = new SparkContext(conf)

    val rdd1 = sc.makeRDD(
      List(("a",1),("b",2),("c",3))
    )

    val rdd2 = sc.makeRDD(
      List(("a",4),("d",5),("c",6))
    )

    //join会产生笛卡尔积 shuffle
//    val rdd3: RDD[(String, (Int, Int))] = rdd1.join(rdd2)
//    val rdd3 = rdd1.leftOuterJoin(rdd2)
//    val rdd3 = rdd1.rightOuterJoin(rdd2)
//    val rdd3 = rdd1.fullOuterJoin(rdd2)
    val rdd3 = rdd1.cogroup(rdd2)

    rdd3.collect().foreach(println)
 
    sc.stop()
  }

}
